////
////  MKReaderTextFastParser.swift
////  Fanmugua
////
////  Created by MK on 2021/3/30.
////  Copyright © 2021 taolang. All rights reserved.
////
//
//import UIKit
//
//class MKReaderTextFastParser: NSObject {
//    /** 异步解析本地链接
//     * - Parameters:
//     *  - url: 本地文件地址
//     *  - completion: 解析完成
//     */
//    @objc class func parser(url:URL!, completion:MKReaderParserCompletion!) {
//        MKLog("url :\(url.absoluteString)")
//        if url != nil {
//            DispatchQueue.global().async {
//                let readerInfo = parser(url: url)
//                DispatchQueue.main.async {
//                    completion?(readerInfo)
//                }
//            }
//        }
//    }
//
//    /** 解析本地链接
//     * - Parameter url: 本地文件地址
//     * - Returns: 阅读对象
//     */
//    private class func parser(url:URL!) -> MKReaderModel? {
//        // 链接不为空且是本地文件路径
//        if url == nil || url.absoluteString.isEmpty || !url.isFileURL {
//            return nil
//        }
//
//        // 获取文件后缀名作为 bookName
//        let bookName = url.absoluteString.removingPercentEncoding?.lastPathComponent.deletingPathExtension ?? ""
//        let bookId = bookName    // bookName 作为 bookID
//        if bookId.isEmpty {
//            return nil
//        }
//
////        if !MKReaderModel.isExist(bookId: bookId) { // 不存在
//            let content = MKReaderParser.encode(url: url)   // 解析数据
////        MKLog(content)
//            if content.isEmpty {    // 解析失败
//                MKLog(content)
//                return nil
//            }
////            // 阅读模型
////            let readerInfo = MKReaderModel.model(bookId: bookId)
////            readerInfo.bookSourceType = .local
////            readerInfo.bookName = bookName
////
////            // 解析内容并获得章节列表
////            parser(readerInfo: readerInfo, content: content)
////
////            // 解析内容失败
////            if readerInfo.chapterInfos.isEmpty {
////                return nil
////            }
//////            // 首章
//////            let chapterInfo = readerInfo.chapterInfos.first!
//////            // 加载首章
//////            _ = parser(readerInfo: readerInfo, chapterId: chapterInfo.chapterId)
//////            // 设置第一个章节为阅读记录
//////            readerInfo.recordInfo.modify(chapterId:  chapterInfo.chapterId, toPage: 0)
//////            readerInfo.save()
////            return readerInfo
////
////        }else{ // 存在
////            return MKReaderModel.model(bookId: bookId)
////        }
//        return nil
//    }
//
//    /** 解析整本小说
//     *- Parameters:
//     *  - readerInfo: readerInfo
//     *  - content: 小说内容
//     * - Returns: 章节列表
//     */
//    private class func parser(readerInfo:MKReaderModel, content:String!) {
//
//        // 章节列表
//        var chapterInfos:[MKReaderChapterModel] = []
//        // 章节范围列表 [章节ID:[章节优先级:章节内容Range]]
//        var ranges:[String:[String:NSRange]] = [:]
//        // 正则
//        let parten = "第[0-9一二三四五六七八九十百千]*[章回].*"
//        // 排版
//        let content = MKReaderParser.contentTypeSetting(content: content)
//        
//        // 正则匹配
//        var results:[NSTextCheckingResult] = []
//        do{
//            let regularExpression:NSRegularExpression = try NSRegularExpression(pattern: parten, options: .caseInsensitive)
//            results = regularExpression.matches(in: content,
//                                                options: .reportCompletion,
//                                                range: NSRange(location: 0, length: content.length))
//        }catch{
//            return
//        }
//
//        // 解析匹配结果
////        if !results.isEmpty {
////            // 章节数量
////            let count = results.count
////            // 记录最后一个Range
////            var lastRange:NSRange!
////            // 有前言
////            var isHavePreface:Bool = true
////
////            for i in 0...count {
////                // 章节数量分析:
////                // count + 1  = 匹配到的章节数量 + 最后一个章节
////                // 1 + count + 1  = 第一章前面的前言内容 + 匹配到的章节数量 + 最后一个章节
////                // MKLog("章节总数: \(count + 1)  当前正在解析: \(i + 1)")
////                var range = NSMakeRange(0, 0)
////                var location = 0
////                if i < count {
////                    range = results[i].range
////                    location = range.location
////                }
////
////                // 章节列表
////                let info = MKReaderChapterModel()
////                info.bookId = readerInfo.bookId
////                info.chapterId = NSNumber(value: (i + NSNumber(value: isHavePreface).intValue))
////                let priority = NSNumber(value: (i - NSNumber(value: !isHavePreface).intValue))
////                if i == 0 { // 前言
////                    info.chapterName = "开始"
////                    // 内容Range
////                    ranges[info.chapterId.stringValue] = [priority.stringValue:NSMakeRange(0, location)]
////                    // 内容
////                    let content = content.substring(NSMakeRange(0, location))
////                    // 记录
////                    lastRange = range
////                    // 没有内容则不需要添加列表
////                    if content.isEmpty {
////                        isHavePreface = false
////                        continue
////                    }
////                }else if i == count { // 结尾
////                    // 章节名
////                    info.chapterName = content.substring(lastRange)
////
////                    // 内容Range
////                    ranges[info.chapterId.stringValue] = [priority.stringValue:NSMakeRange(lastRange.location + lastRange.length, content.length - lastRange.location - lastRange.length)]
////                }else { // 中间章节
////                    info.chapterName =  content.substring(lastRange)
////                    // 内容Range
////                    ranges[info.chapterId.stringValue] = [priority.stringValue:NSMakeRange(lastRange.location + lastRange.length, location - lastRange.location - lastRange.length)]
////                }
////
////                // 记录
////                lastRange = range
////
////                // 通过章节内容生成章节列表
////                chapterInfos.append(info)
////            }
////        }else{
////            // 章节列表
////            let info = MKReaderChapterModel()
////            info.bookId = readerInfo.bookId
////            info.chapterName = "开始"
////            info.chapterId = NSNumber(value: 1)
////            let priority = NSNumber(value: 0)
////
////            // 内容Range
////            ranges[info.chapterId.stringValue] = [priority.stringValue:NSMakeRange(0, content.length)]
////
////            // 添加章节列表模型
////            chapterInfos.append(info)
//////        }
////
////        // 小说全文
////        readerInfo.fullText = content
////        // 章节列表
////        readerInfo.chapterInfos = chapterInfos
////        // 章节内容范围
////        readerInfo.ranges = ranges
//    }
////
////    /// 获取单个指定章节
////    class func parser(readerInfo:MKReaderModel!, chapterId:NSNumber!, isUpdateFont:Bool = true) -> MKReaderChapterModel? {
////
////        // 获得[章节优先级:章节内容Range]
////        let range = readerInfo.ranges[chapterId.stringValue]
////
////        // 没有了
////        if range != nil {
////            // 当前优先级
////            let priority = range!.keys.first!.integer
////            // 章节内容范围
////            let range = range!.values.first
////            // 当前章节
////            let chapterSimpleInfo = readerInfo.chapterSimpleInfos[priority]
////            // 第一个章节
////            let isFirstChapter:Bool = (priority == 0)
////            // 最后一个章节
////            let isLastChapter:Bool = (priority == (readerInfo.chapterSimpleInfos.count - 1))
////
////            // 上一个章节ID
////            let previousChapterId:NSNumber! = isFirstChapter ? MKREADER_NO_MORE_CHAPTER : readerInfo.chapterSimpleInfos[priority - 1].chapterId
////
////            // 下一个章节ID
////            let nextChapterId:NSNumber! = isLastChapter ? MKREADER_NO_MORE_CHAPTER : readerInfo.chapterSimpleInfos[priority + 1].chapterId
////
////            // 章节内容
////            let chapterInfo = MKReaderChapterModel()
////            chapterInfo.bookId = chapterSimpleInfo.bookId
////            chapterInfo.chapterId = chapterSimpleInfo.chapterId
////            chapterInfo.chapterName = chapterSimpleInfo.chapterName
////            chapterInfo.priority = NSNumber(value: priority)
////            chapterInfo.previousChapterId = previousChapterId
////            chapterInfo.nextChapterId = nextChapterId
////
////            // 章节内容
////            chapterInfo.content = MKREADER_PH_SPACE + readerInfo.fullText.substring(range!).removeSEHeadAndTail
////
////            // 保存
////            if isUpdateFont {
////                chapterInfo.updateFont()
////            }else{
////                chapterInfo.save()
////            }
////            return chapterInfo
////        }
////        return nil
////    }
//}
